//package com.wise.model.content.utils;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import org.springframework.util.CollectionUtils;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//
//
///**
// * 系统菜单模板更新->同步角色菜单
// *
// * @author futao
// * @date 2019/06/11
// */
//public class MenusUtil {
//    /**
//     * 递归获取角色菜单
//     *
//     * @param content
//     * @return
//     */
//    public static List<Menus> analysisJson(String content) {
//        List<Menus> menus = JSON.parseArray(content, Menus.class);
//        List<Menus> showMenus = new ArrayList<>();
//        for (int i = 0; i < menus.size(); i++) {
//            Menus menu = menus.get(i);
//            if (!isShow(menu)) {
//                continue;
//            }
//            if (!CollectionUtils.isEmpty(menu.getChildren())) {
//                menu.setChildren(childrenMenu(menu.getChildren()));
//                showMenus.add(menu);
//            }
//        }
//        return showMenus;
//    }
//
//    /**
//     * 比较系统菜单与角色菜单，根据修改的系统菜单，将角色菜单同步修改
//     *
//     * @param sysMenus  系统菜单
//     * @param roleMenus 当前角色菜单
//     * @return
//     */
//    public static List<Menus> compareMenus(String sysMenus, String roleMenus) {
//        //系统菜单
//        List<Menus> sysMenuList = JSON.parseArray(sysMenus, Menus.class);
//        //修改之前的角色菜单
//        List<Menus> roleMenuListBefore = JSON.parseArray(roleMenus, Menus.class);
//        //修改之后的角色菜单
//        List<Menus> roleMenuListAfter = new ArrayList<>(sysMenuList.size());
//
//        //遍历系统菜单模板
//        for (Menus sysMenu : sysMenuList) {
//            int time = 0;
//            //遍历角色菜单
//            for (Menus roleMenu : roleMenuListBefore) {
//                if (!sysMenu.getId().equals(roleMenu.getId())) {
//                    time++;
//                    continue;
//                }
//                Menus menu = new Menus();
//                menu.setId(sysMenu.getId());
//                menu.setIcon(sysMenu.getIcon());
//                menu.setPath(sysMenu.getPath());
//                menu.setText(sysMenu.getText());
//                menu.setShow(sysMenu.isShow());
//                menu.setAuth(syncAuthInfo(sysMenu.getAuth(), roleMenu.getAuth()));
//                menu.setEnText(sysMenu.getEnText());
//                //子菜单
//                if (!CollectionUtils.isEmpty(sysMenu.getChildren())) {
//                    if (roleMenu.getChildren() == null) {
//                        menu.setChildren(sysMenu.getChildren());
//                    } else {
//                        menu.setChildren(compareChildren(sysMenu.getChildren(), roleMenu.getChildren()));
//                    }
//                    //添加这个菜单
//                    roleMenuListAfter.add(menu);
//                }
//            }
//            if (time == roleMenuListBefore.size()) {
//                roleMenuListAfter.add(sysMenu);
//            }
//        }
//        return roleMenuListAfter;
//    }
//
//    /**
//     * 判断菜单是否显示
//     *
//     * @param menu
//     * @return
//     */
//    private static boolean isShow(Menus menu) {
//        if (!menu.isShow() || (menu.getAuth() != null && !menu.getAuth().getBoolean("show"))) {
//            return false;
//        }
//        return true;
//    }
//
//    /**
//     * 递归子菜单
//     *
//     * @param menuChildren
//     * @return
//     */
//    private static List<Menus> childrenMenu(List<Menus> menuChildren) {
//        List<Menus> showMenus = new ArrayList<>();
//        for (Menus menu : menuChildren) {
//            if (!isShow(menu)) {
//                continue;
//            }
//            if (!CollectionUtils.isEmpty(menu.getChildren())) {
//                menu.setChildren(childrenMenu(menu.getChildren()));
//                showMenus.add(menu);
//            } else {
//                showMenus.add(menu);
//            }
//        }
//        return showMenus;
//    }
//
//    /**
//     * 处理auth信息
//     *
//     * @param systemAuth
//     * @param roleAuth
//     * @return
//     */
//    private static JSONObject syncAuthInfo(JSONObject systemAuth, JSONObject roleAuth) {
//        if (roleAuth == null || systemAuth == null) {
//            return systemAuth;
//        } else {
//            //roleMenu添加sysMenu中新增的内容
//            for (Map.Entry<String, Object> entry : systemAuth.entrySet()) {
//                //如果roleMenu不包含这个kv，则进行添加
//                if (!roleAuth.keySet().contains(entry.getKey())) {
//                    roleAuth.put(entry.getKey(), entry.getValue());
//                }
//            }
//            ArrayList<String> toRemove = new ArrayList<>();
//            //roleMenu删除sysMenu中不存在的内容
//            for (Map.Entry<String, Object> entry : roleAuth.entrySet()) {
//                if (!systemAuth.keySet().contains(entry.getKey())) {
//                    toRemove.add(entry.getKey());
//                }
//            }
//            toRemove.forEach(roleAuth::remove);
//            return roleAuth;
//        }
//    }
//
//    /**
//     * 递归子菜单
//     *
//     * @param sysChildren
//     * @param roleChildren
//     * @return
//     */
//    private static List<Menus> compareChildren(List<Menus> sysChildren, List<Menus> roleChildren) {
//        List<Menus> showMenus = new ArrayList<>();
//
//        for (Menus sysChild : sysChildren) {
//            int time = 0;
//            for (Menus roleMenu : roleChildren) {
//                if (!sysChild.getId().equals(roleMenu.getId())) {
//                    time++;
//                    continue;
//                }
//                Menus menu = new Menus();
//                menu.setId(sysChild.getId());
//                menu.setIcon(sysChild.getIcon());
//                menu.setPath(sysChild.getPath());
//                menu.setText(sysChild.getText());
//                menu.setShow(sysChild.isShow());
//                menu.setAuth(syncAuthInfo(sysChild.getAuth(), roleMenu.getAuth()));
//                menu.setEnText(sysChild.getEnText());
//                if (!CollectionUtils.isEmpty(sysChild.getChildren())) {
//                    List<Menus> children = roleMenu.getChildren();
//                    if (CollectionUtils.isEmpty(children)) {
//                        menu.setChildren(sysChild.getChildren());
//                    } else {
//                        menu.setChildren(compareChildren(sysChild.getChildren(), children));
//                    }
//                    showMenus.add(menu);
//                } else {
//                    showMenus.add(menu);
//                }
//            }
//            if (time == roleChildren.size()) {
//                showMenus.add(sysChild);
//            }
//        }
//        return showMenus;
//    }
//}
